#ifndef __LINKSTACK_H__
#define __LINKSTACK_H__

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <unistd.h>
#include <string.h>
#include "kernel_list.h"

// 用户节点
typedef struct node
{
    int data;
    struct list_head list; // 标准小结构体
}node, *list;

// 链式栈管理结构体
typedef struct 
{
    struct node *top; // top --> 栈顶元素
    int size;
}stack;

// API
stack *init_stack();
bool push(stack *s, list newnode);
bool pop(stack *s, list *pnode);
bool is_empty(stack *s);
list new_node(int num);
void destroy_init(stack *s); // 释放所有节点，留下管理结构体为初始状态
void destroy(stack *s); // 释放所有内存包括管理结构体

#endif